package Day25;

import java.util.Arrays;

/**
 * ----------------------------------------------------------------------------------------------
 * 题目：
 *      把字符串 s 看作 "abcdefghijklmnopqrstuvwxyz"的无限环绕字符串，所以s 看起来是这样的：
 *      "...zabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd...." 。
 *      现在给定另一个字符串 p 。返回s 中 不同 的 p 的 非空子串的数量。
 * ----------------------------------------------------------------------------------------------
 * 示例：
 *      输入：p = "a"
 *      输出：1
 *      解释：字符串 s 中只有 p 的一个 "a" 子字符。
 * ----------------------------------------------------------------------------------------------
 * 方法：
 *      动态规划
 * ----------------------------------------------------------------------------------------------
 */
class Solution {
    public static void main(String[] args) {
        String p = "a";
        System.out.println(findSubstringInWraproundString(p));
    }
    public static int findSubstringInWraproundString(String p) {
        int[] dp = new int[26];
        int k = 0;
        for (int i = 0; i < p.length(); ++i) {
            if (i > 0 && (p.charAt(i) - p.charAt(i - 1) + 26) % 26 == 1) { // 字符之差为 1 或 -25
                ++k;
            } else {
                k = 1;
            }
            dp[p.charAt(i) - 'a'] = Math.max(dp[p.charAt(i) - 'a'], k);
        }
        return Arrays.stream(dp).sum();
    }
}